package com.tron.polymorphism;

import com.tron.inheritance.Employee;
import com.tron.inheritance.Manager;

/**
 * polymorphism [ˌpɒlɪ'mɔːfɪzəm] 多态
 */
public class PolymorphismStart {
    public static void main(String[] args) {
        Employee[] employees = new Employee[3];
        employees[0] = new Employee("1","name1","1",700.0);
        employees[1] = new Manager("2", "name2", "2", 1000.0, 500.0);
        employees[2] = new Employee("3", "name3", "1", 700.0);
        System.out.println("人员   职位类型  工资");
        for (Employee employee : employees) {
            /**
             * employee 即可以引用Employee也可以引用Manager，这种现象叫做多态
             * employee 调用getSalary()时能自动识别到正确的引用对象的方法，这种现象叫做方法的动态绑定
             *
             * 方法调用过程
             * employee调用方法的过程是，首先看引用的类型中有没有定义该方法，如果有就直接调用，如果没有定义该方法则从父类中去查找并调用
             *
             */
            System.out.printf("%2s %4s %10.2f\n",employee.getName(),employee.getType(),employee.getSalary());
        }
    }
}
